// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.

using NUnit.Framework;

namespace TerraFX.Utilities.UnitTests
{
    /// <summary>Provides a set of tests covering the <see cref="IntegerUtilities" /> static class.</summary>
    [TestFixture(Author = "Tanner Gooding", TestOf = typeof(IntegerUtilities))]
    public static class IntegerUtilitiesTests
    {
        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateLeft(int, byte)" /> static method.</summary>
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 00, unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 01, unchecked((int)0b1101_1001_0101_0000_1100_1000_0100_0001))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 02, unchecked((int)0b1011_0010_1010_0001_1001_0000_1000_0011))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 03, 0b0110_0101_0100_0011_0010_0001_0000_0111)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 04, unchecked((int)0b1100_1010_1000_0110_0100_0010_0000_1110))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 05, unchecked((int)0b1001_0101_0000_1100_1000_0100_0001_1101))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 06, 0b0010_1010_0001_1001_0000_1000_0011_1011)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 07, 0b0101_0100_0011_0010_0001_0000_0111_0110)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 08, unchecked((int)0b1010_1000_0110_0100_0010_0000_1110_1100))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 09, 0b0101_0000_1100_1000_0100_0001_1101_1001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 10, unchecked((int)0b1010_0001_1001_0000_1000_0011_1011_0010))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 11, 0b0100_0011_0010_0001_0000_0111_0110_0101)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 12, unchecked((int)0b1000_0110_0100_0010_0000_1110_1100_1010))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 13, 0b0000_1100_1000_0100_0001_1101_1001_0101)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 14, 0b0001_1001_0000_1000_0011_1011_0010_1010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 15, 0b0011_0010_0001_0000_0111_0110_0101_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 16, 0b0110_0100_0010_0000_1110_1100_1010_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 17, unchecked((int)0b1100_1000_0100_0001_1101_1001_0101_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 18, unchecked((int)0b1001_0000_1000_0011_1011_0010_1010_0001))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 19, 0b0010_0001_0000_0111_0110_0101_0100_0011)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 20, 0b0100_0010_0000_1110_1100_1010_1000_0110)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 21, unchecked((int)0b1000_0100_0001_1101_1001_0101_0000_1100))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 22, 0b0000_1000_0011_1011_0010_1010_0001_1001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 23, 0b0001_0000_0111_0110_0101_0100_0011_0010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 24, 0b0010_0000_1110_1100_1010_1000_0110_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 25, 0b0100_0001_1101_1001_0101_0000_1100_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 26, unchecked((int)0b1000_0011_1011_0010_1010_0001_1001_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 27, 0b0000_0111_0110_0101_0100_0011_0010_0001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 28, 0b0000_1110_1100_1010_1000_0110_0100_0010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 29, 0b0001_1101_1001_0101_0000_1100_1000_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 30, 0b0011_1011_0010_1010_0001_1001_0000_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 31, 0b0111_0110_0101_0100_0011_0010_0001_0000)]
        public static void RotateLeftInt32ByteTest(int value, byte bits, int expectedResult)
        {
            Assert.That(IntegerUtilities.RotateLeft(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateLeft(long, byte)" /> static method.</summary>
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 00, unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 01, unchecked((long)0b1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 02, unchecked((long)0b1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 03, unchecked((long)0b1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 04, unchecked((long)0b1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 05, unchecked((long)0b1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 06, unchecked((long)0b1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 07, 0b0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 08, unchecked((long)0b1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 09, unchecked((long)0b1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 10, 0b0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 11, unchecked((long)0b1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 12, unchecked((long)0b1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 13, unchecked((long)0b1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 14, 0b0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 15, 0b0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 16, unchecked((long)0b1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 17, 0b0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 18, unchecked((long)0b1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 19, unchecked((long)0b1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 20, unchecked((long)0b1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 21, 0b0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 22, unchecked((long)0b1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 23, 0b0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 24, unchecked((long)0b1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 25, 0b0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 26, 0b0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 27, unchecked((long)0b1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 28, unchecked((long)0b1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 29, 0b0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 30, 0b0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 31, 0b0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 32, 0b0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 33, unchecked((long)0b1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 34, unchecked((long)0b1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 35, unchecked((long)0b1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 36, 0b0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 37, unchecked((long)0b1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 38, unchecked((long)0b1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 39, 0b0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 40, 0b0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 41, unchecked((long)0b1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 42, 0b0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 43, unchecked((long)0b1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 44, 0b0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 45, unchecked((long)0b1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 46, 0b0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 47, 0b0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 48, 0b0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 49, 0b0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 50, unchecked((long)0b1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 51, unchecked((long)0b1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 52, 0b0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 53, 0b0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 54, unchecked((long)0b1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 55, 0b0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 56, 0b0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 57, 0b0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 58, 0b0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 59, unchecked((long)0b1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 60, 0b0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 61, 0b0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 62, 0b0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 63, 0b0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000)]
        public static void RotateLeftInt64ByteTest(long value, byte bits, long expectedResult)
        {
            Assert.That(IntegerUtilities.RotateLeft(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateLeft(uint, byte)" /> static method.</summary>
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 00, 0b1110_1100_1010_1000_0110_0100_0010_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 01, 0b1101_1001_0101_0000_1100_1000_0100_0001)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 02, 0b1011_0010_1010_0001_1001_0000_1000_0011)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 03, unchecked((uint)0b0110_0101_0100_0011_0010_0001_0000_0111))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 04, 0b1100_1010_1000_0110_0100_0010_0000_1110)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 05, 0b1001_0101_0000_1100_1000_0100_0001_1101)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 06, unchecked((uint)0b0010_1010_0001_1001_0000_1000_0011_1011))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 07, unchecked((uint)0b0101_0100_0011_0010_0001_0000_0111_0110))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 08, 0b1010_1000_0110_0100_0010_0000_1110_1100)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 09, unchecked((uint)0b0101_0000_1100_1000_0100_0001_1101_1001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 10, 0b1010_0001_1001_0000_1000_0011_1011_0010)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 11, unchecked((uint)0b0100_0011_0010_0001_0000_0111_0110_0101))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 12, 0b1000_0110_0100_0010_0000_1110_1100_1010)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 13, unchecked((uint)0b0000_1100_1000_0100_0001_1101_1001_0101))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 14, unchecked((uint)0b0001_1001_0000_1000_0011_1011_0010_1010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 15, unchecked((uint)0b0011_0010_0001_0000_0111_0110_0101_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 16, unchecked((uint)0b0110_0100_0010_0000_1110_1100_1010_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 17, 0b1100_1000_0100_0001_1101_1001_0101_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 18, 0b1001_0000_1000_0011_1011_0010_1010_0001)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 19, unchecked((uint)0b0010_0001_0000_0111_0110_0101_0100_0011))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 20, unchecked((uint)0b0100_0010_0000_1110_1100_1010_1000_0110))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 21, 0b1000_0100_0001_1101_1001_0101_0000_1100)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 22, unchecked((uint)0b0000_1000_0011_1011_0010_1010_0001_1001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 23, unchecked((uint)0b0001_0000_0111_0110_0101_0100_0011_0010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 24, unchecked((uint)0b0010_0000_1110_1100_1010_1000_0110_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 25, unchecked((uint)0b0100_0001_1101_1001_0101_0000_1100_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 26, 0b1000_0011_1011_0010_1010_0001_1001_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 27, unchecked((uint)0b0000_0111_0110_0101_0100_0011_0010_0001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 28, unchecked((uint)0b0000_1110_1100_1010_1000_0110_0100_0010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 29, unchecked((uint)0b0001_1101_1001_0101_0000_1100_1000_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 30, unchecked((uint)0b0011_1011_0010_1010_0001_1001_0000_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 31, unchecked((uint)0b0111_0110_0101_0100_0011_0010_0001_0000))]
        public static void RotateLeftUInt32ByteTest(uint value, byte bits, uint expectedResult)
        {
            Assert.That(IntegerUtilities.RotateLeft(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateLeft(ulong, byte)" /> static method.</summary>
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 00, 0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 01, 0b1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 02, 0b1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 03, 0b1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 04, 0b1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 05, 0b1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 06, 0b1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 07, unchecked((ulong)0b0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 08, 0b1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 09, 0b1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 10, unchecked((ulong)0b0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 11, 0b1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 12, 0b1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 13, 0b1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 14, unchecked((ulong)0b0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 15, unchecked((ulong)0b0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 16, 0b1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 17, unchecked((ulong)0b0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 18, 0b1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 19, 0b1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 20, 0b1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 21, unchecked((ulong)0b0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 22, 0b1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 23, unchecked((ulong)0b0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 24, 0b1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 25, unchecked((ulong)0b0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 26, unchecked((ulong)0b0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 27, 0b1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 28, 0b1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 29, unchecked((ulong)0b0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 30, unchecked((ulong)0b0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 31, unchecked((ulong)0b0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 32, unchecked((ulong)0b0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 33, 0b1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 34, 0b1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 35, 0b1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 36, unchecked((ulong)0b0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 37, 0b1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 38, 0b1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 39, unchecked((ulong)0b0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 40, unchecked((ulong)0b0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 41, 0b1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 42, unchecked((ulong)0b0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 43, 0b1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 44, unchecked((ulong)0b0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 45, 0b1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 46, unchecked((ulong)0b0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 47, unchecked((ulong)0b0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 48, unchecked((ulong)0b0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 49, unchecked((ulong)0b0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 50, 0b1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 51, 0b1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 52, unchecked((ulong)0b0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 53, unchecked((ulong)0b0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 54, 0b1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 55, unchecked((ulong)0b0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 56, unchecked((ulong)0b0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 57, unchecked((ulong)0b0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 58, unchecked((ulong)0b0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 59, 0b1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 60, unchecked((ulong)0b0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 61, unchecked((ulong)0b0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 62, unchecked((ulong)0b0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 63, unchecked((ulong)0b0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000))]
        public static void RotateLeftUInt64ByteTest(ulong value, byte bits, ulong expectedResult)
        {
            Assert.That(IntegerUtilities.RotateLeft(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateRight(int, byte)" /> static method.</summary>
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 00, unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 01, 0b0111_0110_0101_0100_0011_0010_0001_0000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 02, 0b0011_1011_0010_1010_0001_1001_0000_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 03, 0b0001_1101_1001_0101_0000_1100_1000_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 04, 0b0000_1110_1100_1010_1000_0110_0100_0010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 05, 0b0000_0111_0110_0101_0100_0011_0010_0001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 06, unchecked((int)0b1000_0011_1011_0010_1010_0001_1001_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 07, 0b0100_0001_1101_1001_0101_0000_1100_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 08, 0b0010_0000_1110_1100_1010_1000_0110_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 09, 0b0001_0000_0111_0110_0101_0100_0011_0010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 10, 0b0000_1000_0011_1011_0010_1010_0001_1001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 11, unchecked((int)0b1000_0100_0001_1101_1001_0101_0000_1100))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 12, 0b0100_0010_0000_1110_1100_1010_1000_0110)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 13, 0b0010_0001_0000_0111_0110_0101_0100_0011)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 14, unchecked((int)0b1001_0000_1000_0011_1011_0010_1010_0001))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 15, unchecked((int)0b1100_1000_0100_0001_1101_1001_0101_0000))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 16, 0b0110_0100_0010_0000_1110_1100_1010_1000)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 17, 0b0011_0010_0001_0000_0111_0110_0101_0100)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 18, 0b0001_1001_0000_1000_0011_1011_0010_1010)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 19, 0b0000_1100_1000_0100_0001_1101_1001_0101)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 20, unchecked((int)0b1000_0110_0100_0010_0000_1110_1100_1010))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 21, 0b0100_0011_0010_0001_0000_0111_0110_0101)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 22, unchecked((int)0b1010_0001_1001_0000_1000_0011_1011_0010))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 23, 0b0101_0000_1100_1000_0100_0001_1101_1001)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 24, unchecked((int)0b1010_1000_0110_0100_0010_0000_1110_1100))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 25, 0b0101_0100_0011_0010_0001_0000_0111_0110)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 26, 0b0010_1010_0001_1001_0000_1000_0011_1011)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 27, unchecked((int)0b1001_0101_0000_1100_1000_0100_0001_1101))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 28, unchecked((int)0b1100_1010_1000_0110_0100_0010_0000_1110))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 29, 0b0110_0101_0100_0011_0010_0001_0000_0111)]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 30, unchecked((int)0b1011_0010_1010_0001_1001_0000_1000_0011))]
        [TestCase(unchecked((int)0b1110_1100_1010_1000_0110_0100_0010_0000), 31, unchecked((int)0b1101_1001_0101_0000_1100_1000_0100_0001))]
        public static void RotateRightInt32ByteTest(int value, byte bits, int expectedResult)
        {
            Assert.That(IntegerUtilities.RotateRight(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateRight(long, byte)" /> static method.</summary>
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 00, unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 01, 0b0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 02, 0b0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 03, 0b0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 04, 0b0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 05, unchecked((long)0b1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 06, 0b0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 07, 0b0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 08, 0b0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 09, 0b0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 10, unchecked((long)0b1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 11, 0b0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 12, 0b0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 13, unchecked((long)0b1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 14, unchecked((long)0b1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 15, 0b0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 16, 0b0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 17, 0b0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 18, 0b0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 19, unchecked((long)0b1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 20, 0b0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 21, unchecked((long)0b1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 22, 0b0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 23, unchecked((long)0b1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 24, 0b0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 25, 0b0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 26, unchecked((long)0b1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 27, unchecked((long)0b1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 28, 0b0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 29, unchecked((long)0b1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 30, unchecked((long)0b1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 31, unchecked((long)0b1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 32, 0b0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 33, 0b0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 34, 0b0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 35, 0b0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 36, unchecked((long)0b1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 37, unchecked((long)0b1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 38, 0b0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 39, 0b0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 40, unchecked((long)0b1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 41, 0b0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 42, unchecked((long)0b1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 43, 0b0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 44, unchecked((long)0b1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 45, unchecked((long)0b1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 46, unchecked((long)0b1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 47, 0b0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 48, unchecked((long)0b1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 49, 0b0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 50, 0b0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 51, unchecked((long)0b1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 52, unchecked((long)0b1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 53, unchecked((long)0b1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 54, 0b0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 55, unchecked((long)0b1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 56, unchecked((long)0b1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 57, 0b0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111)]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 58, unchecked((long)0b1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 59, unchecked((long)0b1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 60, unchecked((long)0b1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 61, unchecked((long)0b1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 62, unchecked((long)0b1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011))]
        [TestCase(unchecked((long)0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000), 63, unchecked((long)0b1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001))]
        public static void RotateRightInt64ByteTest(long value, byte bits, long expectedResult)
        {
            Assert.That(IntegerUtilities.RotateRight(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateRight(uint, byte)" /> static method.</summary>
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 00, 0b1110_1100_1010_1000_0110_0100_0010_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 01, unchecked((uint)0b0111_0110_0101_0100_0011_0010_0001_0000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 02, unchecked((uint)0b0011_1011_0010_1010_0001_1001_0000_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 03, unchecked((uint)0b0001_1101_1001_0101_0000_1100_1000_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 04, unchecked((uint)0b0000_1110_1100_1010_1000_0110_0100_0010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 05, unchecked((uint)0b0000_0111_0110_0101_0100_0011_0010_0001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 06, 0b1000_0011_1011_0010_1010_0001_1001_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 07, unchecked((uint)0b0100_0001_1101_1001_0101_0000_1100_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 08, unchecked((uint)0b0010_0000_1110_1100_1010_1000_0110_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 09, unchecked((uint)0b0001_0000_0111_0110_0101_0100_0011_0010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 10, unchecked((uint)0b0000_1000_0011_1011_0010_1010_0001_1001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 11, 0b1000_0100_0001_1101_1001_0101_0000_1100)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 12, unchecked((uint)0b0100_0010_0000_1110_1100_1010_1000_0110))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 13, unchecked((uint)0b0010_0001_0000_0111_0110_0101_0100_0011))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 14, 0b1001_0000_1000_0011_1011_0010_1010_0001)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 15, 0b1100_1000_0100_0001_1101_1001_0101_0000)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 16, unchecked((uint)0b0110_0100_0010_0000_1110_1100_1010_1000))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 17, unchecked((uint)0b0011_0010_0001_0000_0111_0110_0101_0100))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 18, unchecked((uint)0b0001_1001_0000_1000_0011_1011_0010_1010))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 19, unchecked((uint)0b0000_1100_1000_0100_0001_1101_1001_0101))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 20, 0b1000_0110_0100_0010_0000_1110_1100_1010)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 21, unchecked((uint)0b0100_0011_0010_0001_0000_0111_0110_0101))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 22, 0b1010_0001_1001_0000_1000_0011_1011_0010)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 23, unchecked((uint)0b0101_0000_1100_1000_0100_0001_1101_1001))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 24, 0b1010_1000_0110_0100_0010_0000_1110_1100)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 25, unchecked((uint)0b0101_0100_0011_0010_0001_0000_0111_0110))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 26, unchecked((uint)0b0010_1010_0001_1001_0000_1000_0011_1011))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 27, 0b1001_0101_0000_1100_1000_0100_0001_1101)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 28, 0b1100_1010_1000_0110_0100_0010_0000_1110)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 29, unchecked((uint)0b0110_0101_0100_0011_0010_0001_0000_0111))]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 30, 0b1011_0010_1010_0001_1001_0000_1000_0011)]
        [TestCase(0b1110_1100_1010_1000_0110_0100_0010_0000, 31, 0b1101_1001_0101_0000_1100_1000_0100_0001)]
        public static void RotateRightUInt32ByteTest(uint value, byte bits, uint expectedResult)
        {
            Assert.That(IntegerUtilities.RotateRight(value, bits),
                Is.EqualTo(expectedResult)
            );
        }

        /// <summary>Provides validation of the <see cref="IntegerUtilities.RotateRight(ulong, byte)" /> static method.</summary>
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 00, 0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 01, unchecked((ulong)0b0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 02, unchecked((ulong)0b0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 03, unchecked((ulong)0b0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 04, unchecked((ulong)0b0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 05, 0b1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 06, unchecked((ulong)0b0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 07, unchecked((ulong)0b0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 08, unchecked((ulong)0b0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 09, unchecked((ulong)0b0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 10, 0b1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 11, unchecked((ulong)0b0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 12, unchecked((ulong)0b0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 13, 0b1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 14, 0b1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 15, unchecked((ulong)0b0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 16, unchecked((ulong)0b0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 17, unchecked((ulong)0b0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 18, unchecked((ulong)0b0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 19, 0b1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 20, unchecked((ulong)0b0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 21, 0b1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011_0010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 22, unchecked((ulong)0b0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 23, 0b1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 24, unchecked((ulong)0b0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 25, unchecked((ulong)0b0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011_1011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 26, 0b1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 27, 0b1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 28, unchecked((ulong)0b0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 29, 0b1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100_0011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 30, 0b1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110_0001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 31, 0b1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011_0000)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 32, unchecked((ulong)0b0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001_1000))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 33, unchecked((ulong)0b0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100_1100))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 34, unchecked((ulong)0b0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010_0110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 35, unchecked((ulong)0b0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101_0011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 36, 0b1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010_1001)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 37, 0b1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101_0100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 38, unchecked((ulong)0b0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110_1010))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 39, unchecked((ulong)0b0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111_0101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 40, 0b1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011_1010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 41, unchecked((ulong)0b0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101_1101))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 42, 0b1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 43, unchecked((ulong)0b0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 44, 0b1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100_1011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 45, 0b1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110_0101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 46, 0b1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111_0010)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 47, unchecked((ulong)0b0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011_1001))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 48, 0b1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101_1100)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 49, unchecked((ulong)0b0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110_1110))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 50, unchecked((ulong)0b0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011_0111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 51, 0b1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101_1011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 52, 0b1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 53, 0b1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111_0110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 54, unchecked((ulong)0b0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111_1011))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 55, 0b1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111_1101)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 56, 0b1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111_1110)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 57, unchecked((ulong)0b0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111_1111))]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 58, 0b1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 59, 0b1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 60, 0b1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000_1111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 61, 0b1111_0110_1110_0101_1101_0100_1100_0011_1011_0010_1010_0001_1001_0000_1000_0111)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 62, 0b1111_1011_0111_0010_1110_1010_0110_0001_1101_1001_0101_0000_1100_1000_0100_0011)]
        [TestCase(0b1111_1110_1101_1100_1011_1010_1001_1000_0111_0110_0101_0100_0011_0010_0001_0000, 63, 0b1111_1101_1011_1001_0111_0101_0011_0000_1110_1100_1010_1000_0110_0100_0010_0001)]
        public static void RotateRightUInt64ByteTest(ulong value, byte bits, ulong expectedResult)
        {
            Assert.That(IntegerUtilities.RotateRight(value, bits),
                Is.EqualTo(expectedResult)
            );
        }
    }
}
